package com.silverbox.shopper.service.info;

import java.util.List;
import java.util.Map;

import com.silverbox.shopper.entity.BusinessEncoding;
import com.silverbox.shopper.entity.BusinessWhiteList;
import com.silverbox.shopper.entity.DiningArea;
import com.silverbox.shopper.entity.EpayShopConfig;
import com.silverbox.shopper.entity.Machine;
import com.silverbox.shopper.entity.OuterSupport;
import com.silverbox.shopper.entity.PayChannel;
import com.silverbox.shopper.entity.Qrcode;
import com.silverbox.shopper.entity.ReserveBasicInfo;
import com.silverbox.shopper.entity.Shopper;
import com.silverbox.shopper.entity.ShopperConfig;
import com.silverbox.shopper.entity.ShopperExtend;
import com.silverbox.shopper.entity.ShopperNotice;
import com.silverbox.shopper.entity.ShopperService;
import com.silverbox.shopper.entity.ThirdPartyAuthorization;
import com.silverbox.shopper.entity.ThirdUserInfo;
import com.silverbox.shopper.entity.extend.DecorationShopConfigDetailExtend;
import com.silverbox.shopper.entity.extend.EmployeeExtend;
import com.silverbox.shopper.entity.extend.InvoiceServiceInfo;
import com.silverbox.shopper.entity.extend.ShopperActivities;
import com.silverbox.shopper.entity.extend.ShopperAndParent;
import com.silverbox.shopper.entity.extend.ShopperInfo;
import com.silverbox.sweeporder.controller.index.vo.PromotionInfoVO;
import com.silverbox.sweeporder.controller.waimai.outvo.ShopBusinessInfoVo;
import com.silverbox.waimai.entity.TakeOutBilling;
import com.silverbox.waimai.entity.TakeOutConfig;
import com.silverbox.sweeporder.controller.index.vo.ShopAddressInfoVO;

public interface ShopperInfoService {

	/**
	 * 查询桌台信息
	 *
	 * @return
	 */
	DiningArea getDiningAreaById(Integer Id);

	/**
	 * 根据桌台uid查询桌台信息
	 *
	 * @param uid
	 * @return
	 */
	DiningArea getDiningAreaByUid(String uid);

	/**
	 * 查询店铺配置（根据店铺id）
	 *
	 * @param
	 * @return
	 */
	List<ShopperConfig> getShopperConfig(ShopperConfig shopperConfig);

	/**
	 * 获取店铺及其主店铺信息
	 *
	 * @param storeId
	 * @return
	 */
	ShopperAndParent getShopperAndParent(Integer storeId);

	/**
	 * 获取店铺信息
	 * @param storeId
	 * @return
	 */
	Shopper getShopper(Integer storeId);

	/**
	 * 获取店铺最新的公告
	 *
	 * @param storeId
	 * @return
	 */
	ShopperNotice getShopperNotice(Integer storeId, String nowDate);

	/**
	 * 根据用户ID及来源获取第三方用户信息
	 * @param buyerId
	 * @param source
	 * @return
	 */
	ThirdUserInfo getThirdUserInfo(String buyerId, Integer source);

	/**
	 * 根据门店id获取口碑门店信息
	 *
	 * @param storeId
	 * @return
	 */
	ThirdPartyAuthorization getThirdPartyAuthorization(Integer storeId);

	/**
	 * 根据门店id获取门店扩展信息
	 *
	 * @param storeId
	 * @return
	 */
	ShopperExtend getShopperExtend(Integer storeId);

	/**
	 * 根据口碑门店id获取店铺活动
	 *
	 * @param shopId
	 * @return
	 */
	List<ShopperActivities> getShopperActivities(String shopId, String nowDate);

	/**
	 * 获取店铺所有服务信息
	 *
	 * @param storeId
	 * @return
	 */
	List<ShopperService> getShopperService(Integer storeId);

	/**
	 * 根据店铺查询店铺秒付数据回流配置的主机id
	 *
	 * @param storeId
	 * @return
	 */
	EpayShopConfig getEpayShopConfig(Integer storeId);

	/**
	 * 根据桌台号获取绑定的员工id
	 *
	 * @param tableNo
	 * @return
	 */
	EmployeeExtend getRelTableEmployee(Integer tableNo);

	/**
	 * 查询店铺机器
	 *
	 * @return
	 */
	List<Machine> getMachineByStoreId(Integer storeId);

	/**
	 * 获取扫码下单店铺装修默认配置信息
	 * @return Map
	 * @author yxy
	 * @date 2018年1月24日
	 */
	Map<String, Object> getShopperRenovationDefaultConfig(int decorationType);

	/**
	 * 查询是否有子帐号店铺使用扫码下单店铺装修风格
	 *
	 * @param storeId
	 * @return List
	 * @author yxy
	 * @date 2018年1月24日
	 */
	List<Long> getShopperRenovationByStoreId(Integer storeId,int decorationType);

	/**
	 * 根据主店铺帐号查询扫码下单店铺装修风格
	 *
	 * @return List
	 * @author yxy
	 * @date 2018年1月24日
	 */
	String getShopperRenovationByShopperId(Long configId,int decorationType);
	/**
	 * 根据白名单业务编码查询业务状态 0表示不开通，1表示部分开通，2表示全部开通
	 *
	 * @param code
	 * @return
	 */
	Integer getWhiteBusinessStatus(String code);

	/**
	 * 查询是否开通白名单
	 *
	 * @param storeId
	 * @param code
	 * @return
	 */
	boolean getIsOpenWhiteBusiness(Integer storeId, String code);

	/**
	 * 获取店铺信息
	 * @param storeId
	 * @param nowDate
	 * @return
	 */
	ShopperInfo getShopperInfo(Integer storeId, String nowDate);

	/**
	 * 保存支付宝授权用户信息
	 * @param thirdUserInfo
	 * @return
	 */
	int saveOrUpdateThirdUserInfo(ThirdUserInfo thirdUserInfo);

	/**
	 * 获取店铺白名单
	 * @param code
	 */
	List<BusinessWhiteList> getShopperBusinessWhiteList(Integer storeId,Integer shopperId, String code);

	/**
	 * 获取所有白名单配置
	 */
	List<BusinessEncoding> getAllBusinessEncoding();

	/**
	 * 获取店铺装修默认某一个功能
	 */
	Integer getShopperRenovationPage(String pageCode,String componentCode,int decorationType);

	/**
	 * 获取店铺装修自定义具体某一功能
	 * @param storeId
	 * @param pageCode
	 * @param componentCode
	 * @return
	 */
	Integer getShopperRenovationCustomPage(Integer storeId, String pageCode, String componentCode,int decorationType);

	/**
	 * 获取商家自定义装修信息明细
	 * @param storeId
	 * @return
	 */
	List<DecorationShopConfigDetailExtend> getShopperPageDetail(Integer storeId,int decorationType);

	/**
	 * 获取装修平台默认配置
	 * @return
	 */
	List<DecorationShopConfigDetailExtend> getShopperDefaultPageDetail(int decorationType);

	/**
	 * 是否开启装修配置风格二
	 * @param storeId
	 * @return
	 */
	boolean getShopperRenovationStyleByStoreId(Integer storeId,int decorationType);

	/**
	 * 获取店铺绑定的机器是否无桌台图形模式
	 * @param storeId
	 * @return
	 */
	boolean getMachineConfig(Integer storeId);

	/**
	 * 获取订单类型
	 * @param id
	 * @return
	 */
	OuterSupport getOuterSupportById(Long id);

	/**
	 * 判断商家是否开通了扫呗支付
	 * @param storeId
	 * @param shopperId
	 * @return
	 */
	boolean isSaoBei(Integer storeId, Integer shopperId);

	/**
	 * 查询订单是否开通蚂蚁支付方式
	 * @param storeId
	 * @return
	 */
	List<PayChannel> getAntPayModel(Integer storeId);

	/**
	 * 获取第三方用户信息
	 * @param id
	 * @return
	 */
	ThirdUserInfo getThirdUserInfoById(Long id);

	/**
	 * 获取桌台信息（根据桌台名称）
	 * @param tableName
	 * @param storeId
	 * @return
	 */
	DiningArea getDiningAreaByTableName(String tableName,Integer storeId);

	/**
	 * 获取二维码信息
	 * @param guid
	 * @return
	 */
	Qrcode getQrcodeInfoByGuid(String guid);

	/**
	 * 判断商家是否开通了蚂蚁微信
	 * @param storeId
	 * @param shopperId
	 * @return
	 */
	boolean isWxPay(Integer storeId, Integer shopperId);

	/**
	 * 根据店铺ID更新out_index/in_index
	 * @param storeId
	 * @return
	 */
	int updateIndex(Integer storeId);

	/**
	 * 根据店铺ID 订单类型 index值更新out_index/in_index
	 * @param storeId
	 * @param orderType
	 * @param index
	 * @return
	 */
	int updateIndexs(Integer storeId, Integer orderType, Integer index);


	/**
	 * 获取 in_index/out_index 、shop_hours值
	 * @param storeId
	 * @param orderType
	 * @return
	 */
	Shopper selectIndex(Integer storeId, Integer orderType);

	/**
	 * 根据店铺ID获取支付方式
	 * @param payType
	 * @param storeId
	 * @param shopperId
	 * @return
	 */
	List<PayChannel> findShopPayChannel(Integer payType, Integer storeId, Integer shopperId);

	/**
	 * 查询店铺订购开发票服务信息
	 * @param storeId
	 * @return
	 */
	List<InvoiceServiceInfo> findInvoiceServiceInfo(Integer storeId);

    double findShopperBagPrice(Integer storeId);

    Object findShopperConfigByShopperId(Integer storeId, String ctr_vip_chain_store);

    Map<String, Object> getShopLatAndLng(Integer storeId, Integer takeOutMethod);

    TakeOutBilling findTakeOutBillingList(Integer storeId, Integer configId);

    Map<String, Object> getBusinessTime(Integer storeId);

    List<Map<String, Object>> findShopPeriod(Integer storeId);

    Integer updateOrderSeq(Integer storeId, int indexType);

    String findAlipayStoreIdByShopper(Integer storeId);

    TakeOutConfig getTakeOutConfigByStoreId(Integer storeId);

    /**
     * 查询发票类型
     * @param storeId
     * @return
     */
    Integer findInvoiceType(Integer storeId);

    /**
     * 查询距离当前位置最近的店铺
     * @param shopperId
     * @param storeId
     * @param cityCode
     * @param longitude
     * @param latitude
     * @return
     */
    List<ShopAddressInfoVO > getNearestStoreAddressInfo(Integer shopperId,Integer storeId,String cityCode,String longitude,String latitude);

    /**
	 * 获取预约取餐信息
	 * @param shopId
	 * @param storeId
	 * @return
	 */
	List<ReserveBasicInfo> getReserveBasicInfo(Integer shopId, Integer storeId);

	/**
	 * 餐段根据所有预约时间分组获取
	 * @param shopId
	 * @param storeId
	 * @return
	 */
	List<String> getReserveStageListByStoreId(Integer shopId, Integer storeId);

	/**
	 * 获取预约时间获取预约取餐信息
	 * @param shopId
	 * @param storeId
	 * @param reserveTime
	 * @return
	 */
	ReserveBasicInfo getReserveBasicInfoByTime(Integer shopId, Integer storeId, String reserveTime);

	/**
	 * 根据店铺ID和当前日期获取店铺公告
	 * @param storeId
	 * @param date
	 * @return
	 */
	List<ShopperNotice> getNoticeDetail(Integer storeId, String nowDate);

    String getWaimaiBusinessInfo(Integer storeId, Integer takeOutPeriodType);

    List<Map<String, Object>> getStoreLogoListByStoreIds(List<Long> storeIds);

    Long getShopIdByAppId(String appId);

    List<PromotionInfoVO> findStorePromotionInfoList(Integer storeId);

    List<Long> getShopIdListByAppId(String appId);

    List<String> getThirdUserInfoByMemberUid(String memberUid);

    List<Map<String, Object>> getMiniConfigChannelAndMiniTypeKey(String appId);

    List<Long> getShopIdListByConfigKey(List<String> configKeys, String appId);

    ShopBusinessInfoVo getShopBusinessInfo(Integer storeId);
}
